package com.myzf.ncov.service.abstracts;

import com.myzf.ncov.service.DataHandleService;
import com.myzf.ncov.utils.MapCacheUtil;
import com.myzf.ncov.utils.SendMessageUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 模板设计模式，处理的抽象类
 *
 * @author limuyi
 * @version V1.0
 * Created by limuyi on 2020-02-01 15:26
 */
@Slf4j
public abstract class DataHandleAbstract implements DataHandleService {

    @Override
    public void deal(String key, String data) {
        // 1.真实处理，返回处理过的结果
      //  log.info("返回数据：" + data);
        String result = realDeal(data);
        if(null==result){
            log.error("### 处理数据失败 ###");

        }else if(result.equals("")){
            log.info("### 无需更新数据 ###");
        }
        else if (null != result) {
//            MapCacheUtil map = MapCacheUtil.getInstance();
//            // 2.判断是否为最新数据，决定是否进行消息推送。
//            String value = String.valueOf(map.getCacheItem(key));
//            if (null != value && !value.equals(result)) {
//                messagePush(result);
//            }
//
//            // 3.把处理过的数据放入缓存map
//            map.putCacheItem(key, result);
            log.info("### 开始推送消息 ###");
            sendMsg(result);
            log.info("### 结束推送消息 ###");
            // messagePush(result);

        } else {
            log.error("### 处理数据失败 ###");
        }
    }

    protected abstract void sendMsg(String result);

    private void messagePush(String data) {
        log.info("--- 推送微信开始 ---");
        log.info(data);
     //   SendMessageUtil.sendMessage(data, null, "微信 ");
        SendMessageUtil.sendMessage(data, "WeChatMainWndForPC", "微信");
        log.info("--- 推送微信结束 ---");
    }

    protected abstract String realDeal(String data);
}
